﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;
using System.Web.UI.DataVisualization;
using System.Web.UI.DataVisualization.Charting;
using System.Drawing;

namespace AudiPyme.UI
{
    public partial class AdTblAmenazas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                LlenaGridView("", "");
            }
        }

        private void LlenaGridView(String OpcionFiltro, String TextoBuscar)
        {
            try
            {
                ModeloContainer agenteBD = new ModeloContainer();
                OpcionFiltro = RblFiltro.SelectedValue;
                TextoBuscar = TxtFiltro.Text;
                List<AmenazasTabla> LAmenazas = new List<AmenazasTabla>();
                //Si no se ha introducido texto de búsqueda, sacamos todos las amenazas disponibles
                if (TextoBuscar.Equals("") || OpcionFiltro.Equals(""))
                {
                    LAmenazas = AmenazasTabla.AmenazasActuales();
                    GVAmenazas.DataSource = LAmenazas;
                    GVAmenazas.DataBind();
                }
                else
                {
                    switch (OpcionFiltro)
                    {
                        case "Amenaza":
                            //Busqueda de las amenazas disponibles por el nombre de la amenaza
                            LAmenazas = AmenazasTabla.AmenazasActualesPorAmenaza(TextoBuscar);
                            break;
                        case "TipoAmenaza":
                            //Busqueda de las amenazas disponibles por el tipo de la amenaza
                            LAmenazas = AmenazasTabla.AmenazasActualesPorTipoAmenaza(TextoBuscar);
                            break;
                        default:
                            MuestraMensaje("No se recogio la opcion de Filtro elegida");
                            break;
                    }
                    if (LAmenazas.Count() == 0)
                    {
                        MuestraMensaje("No se encontraron Amenazas con " + OpcionFiltro + " que contuviera la secuencia " + TextoBuscar);
                    }
                    else
                    {
                        GVAmenazas.DataSource = LAmenazas;
                        GVAmenazas.DataBind();
                    }
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al actualizar los valores de la tabla");
            }

        }

        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        protected void GVAmenazas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GVAmenazas.PageIndex = e.NewPageIndex;
            //Si hubiera una fila seleccionada para editar la deseleccionamos
            GVAmenazas.EditIndex = -1;
            String OpcionFiltro = RblFiltro.SelectedValue;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(OpcionFiltro, TextoBuscar);
        }

        protected void GVAmenazas_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            //Deseleccionamos la fila
            GVAmenazas.EditIndex = -1;
            String OpcionFiltro = RblFiltro.SelectedValue;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(OpcionFiltro, TextoBuscar);
        }

        protected void GVAmenazas_RowEditing(object sender, GridViewEditEventArgs e)
        {
            //Seleccionamos la fila seleccionada
            GVAmenazas.EditIndex = e.NewEditIndex;
            //Llenamos el GridView
            String OpcionFiltro = RblFiltro.SelectedValue;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(OpcionFiltro, TextoBuscar);
            //Cargamos las opciones de Tipos de Amenazas actuales disponibles con el Tipo de Amenaza actual 
            //seleccionado para la fila elegida
            GridViewRow row = GVAmenazas.Rows[GVAmenazas.EditIndex];
            if (((DropDownList)row.FindControl("DdlTipAmen")) != null)
            {
                DropDownList DdlTipAmen = (DropDownList)row.FindControl("DdlTipAmen");
                DdlTipAmen.Items.Clear();
                List<String> LTiposAmenazas = TiposAmenazasFactory.NombresTipoAmenaza();
                foreach (String NTipAmen in LTiposAmenazas)
                {
                    int IdTipoAmenaza = TiposAmenazasFactory.IdTipoAmenaza(NTipAmen);
                    DdlTipAmen.Items.Add(new ListItem(NTipAmen, IdTipoAmenaza.ToString()));
                }
                //Recogemos el Tipo de Amenaza de la Amenaza seleccionada
                int IdAmenaza = Int32.Parse(GVAmenazas.Rows[row.RowIndex].Cells[0].Text);
                int TipoAmenaza = TiposAmenazasFactory.IdTipoAmenaza(IdAmenaza);
                DdlTipAmen.SelectedValue = TipoAmenaza.ToString();
            }
        }

        protected void GVAmenazas_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            //Comprobamos que los datos introducidos pasan el validador
            Page.Validate("Validador");
            if (Page.IsValid)
            {
                try
                {
                    //Recogemos la fila seleccionada para editar
                    GridViewRow row = GVAmenazas.Rows[e.RowIndex];
                    //Recogemos el IdAmenaza de la fila seleccionada
                    int IdAmenaza = int.Parse(row.Cells[0].Text);
                    //Recogemos el DropDownList Valor de la fila seleccionada
                    DropDownList DdlTipAmen = (DropDownList)row.FindControl("DdlTipAmen");
                    //Recogemos el TextBox de la fila seleccionada
                    TextBox TxtAmenaza = (TextBox)row.FindControl("TxtAmenaza");
                    String Amenaza = TxtAmenaza.Text;
                    int IdTipoAmenaza = int.Parse(DdlTipAmen.SelectedValue);
                    AmenazasFactory.ActualizaAmenaza(IdAmenaza, Amenaza, IdTipoAmenaza);
                    //Recargamos el GridView para que aparezca la nueva actualizacion
                    GVAmenazas.EditIndex = -1;
                    e.Cancel = true;
                    String OpcionFiltro = RblFiltro.SelectedValue;
                    String TextoBuscar = TxtFiltro.Text;
                    LlenaGridView(OpcionFiltro, TextoBuscar);
                    MuestraMensaje("La Amenaza se ha actualizado correctamente");
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al actualizar la amenaza");
                }
            }
            else
            {
                MuestraMensaje("No se pudo actualizar la Amenaza al no rellenar todos sus campos");

            }
        }

        protected void BtnBuscar_Click(object sender, EventArgs e)
        {
            GVAmenazas.EditIndex = -1;
            String OpcionFiltro = RblFiltro.SelectedValue;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(OpcionFiltro, TextoBuscar);
        }

        protected void RblFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Limpiamos el TextBox ya que venimos de otra opción
            TxtFiltro.Visible = true;
            BtnBuscar.Visible = true;
            TxtFiltro.Text = "";
            String OpcionFiltro = RblFiltro.SelectedValue;
            String TextoBuscar = TxtFiltro.Text;
            LlenaGridView(OpcionFiltro, TextoBuscar);
        }

        protected void GVAmenazas_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                //Recogemos la fila seleccionada para editar
                GridViewRow row = GVAmenazas.Rows[e.RowIndex];
                //Recogemos el IdAmenaza de la fila seleccionada
                int IdAmenaza = int.Parse(row.Cells[0].Text);
                //Eliminamos la Amenaza y todas los elementos que dependan de ella
                AmenazasFactory.EliminaAmenaza(IdAmenaza);
                MuestraMensajeRedirige("La Amenaza se ha eliminado correctamente","AdTblAmenazas");
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error al eliminar la amenaza");
            }
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location='" + Pagina + ".aspx';} else{ window.location='" + Pagina + ".aspx'; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }
    }
}